package com.yifeng.repo.controller.excel.loader.biz;

import com.alibaba.excel.support.ExcelTypeEnum;
import com.yifeng.repo.controller.excel.loader.dto.DataTaskTypeEnum;
import com.yifeng.repo.controller.excel.loader.dto.RowDataDto;
import com.yifeng.repo.controller.excel.loader.dto.RowResultDto;

import java.util.List;
import java.util.Map;

/**
 * Created by daibing on 2022/12/29.
 */
public interface BizImportAction extends BizBaseAction {

    /**
     * 业务动作对应导入文件的URL
     */
    String dataFileUrl();

    /**
     * 导入excel的头：excel头的每列对应的英文code，从0开始
     */
    Map<Integer, String> templateHeader();

    /**
     * 表头行数，下一行才是数据
     */
    default int headRowNumber() {
        return 1;
    }

    /**
     * 导入excel的内容入库
     *
     * @param rows 数据行集合
     * @return {@link List}<{@link RowResultDto}> 导入结果列表，注意RowResultDto里面的Map数据对象必须是 LinkedHashMap 保持顺序，并且支持业务自定义结果excel内容
     */
    List<RowResultDto> sink(List<RowDataDto> rows);

    /**
     * 导入日志业务头，逗号分割。注意这里的头必须 和 sink返回Map数据对象的内容保持一致
     */
    default String importLogBizHeader() {
        return "行数据标识id,行数据标识名";
    }

    /**
     * 获取导入excel对应的ok日志结果文件-上传oss的文件名
     */
    default String getOkLogFileUri(String requestKey, DataTaskTypeEnum type) {
        return "/excel/" + type.name().toLowerCase() + "/" + requestKey + "-ok" + ExcelTypeEnum.XLSX.getValue();
    }

    /**
     * 获取导入excel对应的error日志结果文件-上传oss的文件名
     */
    default String getErrorLogFileUri(String requestKey, DataTaskTypeEnum type) {
        return "/excel/" + type.name().toLowerCase() + "/" + requestKey + "-error" + ExcelTypeEnum.XLSX.getValue();
    }
}
